// 启动 gin，并设置 web 所有路由

package router

import (
	"context"
	"net/http"
	"web01/conf"
	"web01/controller"
	"web01/logger"

	"github.com/gin-gonic/gin"
)

var srv *http.Server

// 注册路由
func setupRouter(r *gin.Engine) {
	r.GET("/", controller.Index)

	r.GET("/register", controller.GoRegister)
	r.POST("/register", controller.RegisterUser)

	r.GET("/login", controller.GoLogin)
	r.POST("/login", controller.Login)

	// 操作博客
	r.GET("/post_index", controller.GetPostIndex)
	r.POST("/post", controller.AddPost)
	r.GET("/post", controller.GoAddPost)
	r.GET("/post_detail", controller.PostDetail)
}

// 启动 web 服务
func Start() {
	// 关闭控制台颜色
	gin.DisableConsoleColor()
	// 关闭 debug
	// gin.SetMode(gin.ReleaseMode)

	// gin 框架日志写入指定文件
	// f, _ := os.OpenFile(conf.GinLogFile, os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0666)
	// gin.DefaultWriter = io.MultiWriter(f)

	// 创建一个 gin 对象，使用自定义的日志和错误处理中间件
	r := gin.New()
	r.Use(logger.LogerMiddleware(), logger.GinRecovery(true))

	r.Static("/assets", "./assets")
	r.LoadHTMLGlob("./templates/*")
	setupRouter(r)

	srv = &http.Server{
		Addr:    conf.Webaddr,
		Handler: r,
	}
	// 通过 http 包启动 gin（可以更优雅的关闭服务）
	go func() {
		if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed {
			logger.Fatalf("gin run err: %s", err.Error())
		}
	}()
}

// 关闭 web 服务
func Shutdown(ctx context.Context) {
	if err := srv.Shutdown(ctx); err != nil {
		logger.Fatal("Server Shutdown: ", err)
	}
}
